package com.itservice.supporter_navi;

import android.app.Dialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.itservice.supporter_navi.MarathonDataBase.MarathonDataBase;
import com.itservice.supporter_navi.MarathonDataBase.libs.DBUtilities;
import com.itservice.supporter_navi.utilities.CommonMethod;
import com.itservice.supporter_navi.utilities.CommonUtilities;
import com.itservice.supporter_navi.utilities.GCMSendMsg;

public class FriendListDialog extends Dialog implements OnClickListener{

	private MarathonDataBase marathonDB; // データベースクラス
	private Context m_context;
	private String m_gcmId = ""; // GCMID
	private String m_regKey = ""; // 認証キー

	public FriendListDialog(Context context, String gcmId, String regKey) {
		super(context);
		m_context = context;
		m_gcmId = gcmId;
		m_regKey = regKey;
	}

	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setTitle(R.string.Friendlist_Dialog_Title);
		setContentView(R.layout.friendlist_dialog);

		//DB接続
		// DBインスタンス取得
		marathonDB = MarathonDataBase.getInstance();

		//ボタンを登録
		Button registButton = (Button)findViewById(R.id.FriendlistDialog_RegistButton);
		Button cancelButton = (Button)findViewById(R.id.FriendlistDialog_CancelButton);
		registButton.setOnClickListener(this);
		cancelButton.setOnClickListener(this);

		//初期値が設定されていれば、表示する。
		if(false == m_gcmId.equals(""))
		{
			EditText gcmEditText = (EditText)findViewById(R.id.FriendListDialog_GCMID_EditText);
			gcmEditText.setText(m_gcmId);
		}

		if(false == m_regKey.equals(""))
		{
			EditText regEditText = (EditText)findViewById(R.id.Friendlist_Dialog_Regist_Key);
			regEditText.setText(m_regKey);
		}
	}

	@Override
	public void onClick(View v) {

		switch(v.getId())
		{
		//登録ボタンが押されたら
		case R.id.FriendlistDialog_RegistButton:

			EditText gcmIdEditText = (EditText)findViewById(R.id.FriendListDialog_GCMID_EditText);
			EditText registKeyEditText = (EditText)findViewById(R.id.Friendlist_Dialog_Regist_Key);
			
			String gcmID = gcmIdEditText.getText().toString();
			int RegNo =marathonDB.friendIdSearch(gcmID);
			
			if(RegNo == -1){
				// DBへ申請中で登録
				CommonMethod.registFriendDataBase(marathonDB, gcmIdEditText.getText().toString(), gcmIdEditText.getText().toString(), DBUtilities.FRIEND_STATUS_REGIST_PENDING);
			}
			// 登録申請（GCM）
			boolean no_user = false;
			boolean no_gcmId = false;
			boolean no_regKey = false;
			String userName  = marathonDB.getText(DBUtilities.USER_NAME, ""); //自身の名前を取得
			String userId  = marathonDB.getText(DBUtilities.USER_ID, ""); //自身のIDを取得
			String friendId =gcmIdEditText.getText().toString();
			String friendRegKey = registKeyEditText.getText().toString();

			// 入力欄に文字列が入力されていないとき
			if(friendId.equals("")){
				// 申請先IDが記入されていない場合
				no_gcmId = true;
			}
			if(friendRegKey.equals("")){
				// 認証キーが記入されていない場合
				no_regKey = true;
			}
			if(userName.equals("") || userId.equals("")){
				//ユーザー登録がされていない場合
				no_user = true;
			}

			// 文字列の入力を促すメッセージを表示
			if(no_gcmId==true){
				Toast toast =Toast.makeText(m_context, "申請先IDを入力して下さい。",Toast.LENGTH_LONG);
				toast.setGravity(Gravity.CENTER, 0, 0);
				toast.show();
				return;
			}
			if(no_regKey==true){
				Toast toast =Toast.makeText(m_context, "認証キーを正しく入力して下さい。",Toast.LENGTH_LONG);
				toast.setGravity(Gravity.CENTER, 0, 0);
				toast.show();
				return;
			}
			if(no_user==true){
				Toast toast =Toast.makeText(m_context, "ユーザ登録が完了していません先に登録を行って下さい。",Toast.LENGTH_LONG);
				toast.setGravity(Gravity.CENTER, 0, 0);
				toast.show();
				return;
			}

			// 以下準備が正常にできた時のみ動作
			String[] ids = {friendId};
			SendAsyncTask task = new SendAsyncTask(ids, CommonUtilities.M_TYPE_FRIEND_APP + "," + userId + "," + userName + "," + friendRegKey + ",");
			task.execute();

			
			break;

		//キャンセルボタンが押されたら
		case R.id.FriendlistDialog_CancelButton:
			break;
		}

		// ダイアログを消去
		dismiss();
	}


	//===========================================================
	// 送信処理へ送信内容を受渡し
	//===========================================================
	public class SendAsyncTask extends AsyncTask<String, String, Long> {
		private String[] mRegIds;
		private String mMsg;

	    public SendAsyncTask(String[] regId , String msg) {
	        this.mRegIds = regId;
	        this.mMsg = msg;
	    }

	    /**
	     * バックグランドで行う処理
	     */
	    @Override
	    protected Long doInBackground(String... params) {
	    	//ServerUtilities.sendMessage(mRegId,mMsg);
	        GCMSendMsg.SendMsg(mRegIds,mMsg);
	        return null;
	    }
	}

}